/**
 * @file ajoutPanel.h
 * @brief Fichier d'entête du module ajoutPanel.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

#ifndef H_AJOUTPANEL_H
#define H_AJOUTPANEL_H

/* *********************************************************************

   Librairies de AjoutPanel
********************************************************************* */

#include <gtk/gtk.h>
#include <stdlib.h>
#include "listeGenreAjout.h"
#include "listePersonneAjout.h"
#include "../core/arbre.h"
#include "../core/oeuvre.h"

/* *********************************************************************

   Définitions des variables

********************************************************************* */

struct sAjoutPane {
  GtkWidget *entreeTitre;
  gulong hTitre;
  GtkWidget *image;
  GtkWidget *btnImage;
  gulong hImage;
  GtkWidget *entreeCommentaire;
  gulong hComm;
  GtkWidget *genre;

  GtkWidget *comboType;
  gulong hType;
  GtkWidget *comboPublic;
  gulong hPublic;
  GtkWidget *dateSortie;
  gulong hSortieJour;
  GtkWidget *personne;
  GtkWidget *boxOeuvre;

  GtkWidget *boxFilm;
  GtkWidget *comboMetrage;
  gulong hMetrage;
  GtkWidget *dateBR;
  gulong hBR;
  GtkWidget *dateDvd;
  gulong hDvd;
  GtkWidget *dateProd;
  gulong hProd;
  GtkWidget *entreeSynopsis;
  gulong hSynopsis;

  GtkWidget *boxLivre;
  GtkWidget *entreeVolume;
  gulong hVolume;
  GtkWidget *entreeISBN;
  gulong hISBN;
  GtkWidget *entreeTaille;
  gulong hTaille;
  GtkWidget *entreeNbPage;
  gulong hNbPage;

  GtkWidget *boxMusique;
  GtkWidget *entreePiste;
  gulong hPiste;
  GtkWidget *entreeDuree;
  gulong hDuree;
  GtkWidget *entreeParole;
  gulong hParole;

  GtkWidget *scroll;
  Arbre *arbre;
  Oeuvre *oeuvre;
};

typedef struct sAjoutPane AjoutPane;

/* *********************************************************************

   Définitions des fonctions

********************************************************************* */

/**
 * @fn AjoutPane * creer_GAPan();
 * @brief Permet de créer la partie de création d'un média
 *
 * @return un AjoutPane
 */
AjoutPane * creer_GAPan();

/**
 * @fn GtkWidget * getContainer_GAPan(AjoutPane *pane);
 * @brief Returne le conteneur de pane
 *
 * @return le conteneur
 */
GtkWidget * getContainer_GAPan(AjoutPane * pane);

/**
 * @fn void setInformationRegroupement_GAPan(AjoutPane * pane, Arbre *arbre);
 * @brief Réinitialise les différents champs de pane aux valeurs du regroupement
 *
 * @param[in,out] pane le panel à changer
 * @param arbre l'arbre contenant le regroupement à affiche
 */
void setInformationRegroupement_GAPan(AjoutPane * pane, Arbre *arbre);

/**
 * @fn void setInformationOeuvre_GAPan(AjoutPane * pane, Oeuvre *ouvre);
 * @brief Réinitialise les différents champs de pane aux valeurs de l'oeuvre
 *
 * @param[in,out] pane le panel à changer
 * @param oeuvre l'oeuvre à afficher
 */
void setInformationOeuvre_GAPan(AjoutPane * pane, Oeuvre *oeuvre);


/**
 * @fn void ajoutListenerTitre_GAPan(AjoutPane * pane, AjoutArbre *aArbre, gboolean (*fonc)());
 * @brief Ajoute un listener sur le gtkEntry Titre. Le listener appelera la fonction fonc et passera en parametre aArbre
 * 
 * @param[in,out] pane
 * @param[in,out] aArbre
 * @param[in,out] fonc est la fonction appelée lorsque le texte du gtkEntry change
 */
void ajoutListenerTitre_GAPan(AjoutPane * pane, void *aArbre, gboolean (*fonc)());

/**
 * @fn void ajoutListenerType_GAPan(AjoutPane * pane, AjoutArbre *aArbre, gboolean (*fonc)());
 * @brief Ajoute un listener sur le gtkCombo Type. Le listener appelera la fonction fonc et passera en parametre aArbre
 * 
 * @param[in,out] pane
 * @param[in,out] aArbre
 * @param[in,out] fonc est la fonction appelée lorsque le texte du gtkEntry change
 */
void ajoutListenerType_GAPan(AjoutPane * pane, void *aArbre, void (*fonc)());

#endif
